Eigenes Debian/Ubuntu Repository erstellen
In dem Repo wird das serverstats.deb
verwendet um die Funktion von reprepro
zu zeigen, wie eigene DEB Pakete erstellt werden, könnt Ihr hier lesen.
Installation benötigter Pakete
Als erstes installieren wir die benötigten Pakete. In dieser Dokumentation verwenden wir den Apache Webserver, der bei mir bereits installiert ist. Sonst müsstem man apache2
als Paket der Liste hinzufügen.
root:~# apt install reprepro gnupg
Erstellen eines GnuPG keys
Mit diesem GPG Schlüssel wird das Repository und die Pakete signiert. Der Public Key muss auf den Zielsystemen als Trusted Key hinterlegt werden.
Beim Erstellen des Keys muss man ein Passwort angeben. Nur mit diesem Passwort ist es möglich neue Pakete zum Repository hinzuzufügen und zu signieren. Der Befehl zum erstellen ist gpg --gen-key
.
root:~# gpg --gen-key
gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Note: Use "gpg --full-generate-key" for a full featured key generation dialog.
GnuPG needs to construct a user ID to identify your key.
Real name: Marko Schulz
Email address: info@tuxnet24.de
You selected this USER-ID:
"Marko Schulz <info@tuxnet24.de>"
Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key A0B45153D3FB5FE9 marked as ultimately trusted
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/102BCF63B5C08736432D8CC9A0B45153D3FB5FE9.rev'
public and secret key created and signed.
pub rsa3072 2023-03-12 [SC] [expires: 2025-03-11]
102BCF63B5C08736432D8CC9A0B45153D3FB5FE9
uid Marko Schulz <info@tuxnet24.de>
sub rsa3072 2023-03-12 [E] [expires: 2025-03-11]
Der Key hat eine Gültigkeit von 2 Jahren, man kann die Gültigkeit verlängern. Das geht mit gpg --edit-key <key_id>
. Mit expire
kann die Gültigkeit des Keys geändert werden.
root:~# gpg --edit-key 102BCF63B5C08736432D8CC9A0B45153D3FB5FE9
gpg (GnuPG) 2.2.27; Copyright (C) 2021 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Secret key is available.
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2025-03-11
sec rsa3072/A0B45153D3FB5FE9
created: 2023-03-12 expires: 2025-03-11 usage: SC
trust: ultimate validity: ultimate
ssb rsa3072/60C4ED57B4C7986D
created: 2023-03-12 expires: 2025-03-11 usage: E
[ultimate] (1). Marko Schulz <info@tuxnet24.de>
gpg> expire
Changing expiration time for the primary key.
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y
sec rsa3072/A0B45153D3FB5FE9
created: 2023-03-12 expires: never usage: SC
trust: ultimate validity: ultimate
ssb rsa3072/60C4ED57B4C7986D
created: 2023-03-12 expires: 2025-03-11 usage: E
[ultimate] (1). Marko Schulz <info@tuxnet24.de>
gpg> key 1
sec rsa3072/A0B45153D3FB5FE9
created: 2023-03-12 expires: never usage: SC
trust: ultimate validity: ultimate
ssb* rsa3072/60C4ED57B4C7986D
created: 2023-03-12 expires: 2025-03-11 usage: E
[ultimate] (1). Marko Schulz <info@tuxnet24.de>
gpg> quit
Save changes? (y/N) y
Erstellen des REPO Verzeichnis
Nun erstellen wir uns ein Repository Verzeichnis. Ich verwende die Default Location des Webservers unter /var/www
(/var/www/html
nutze ich nicht).
root:~# mkdir -p /var/www/deb/{debian,ubuntu}/conf
Erstellen der Apache Konfiguration
Als nächstes erstellen wir uns die Apache Konfiguration für den Vhost deb.tuxnet24.de. Die Includes sind bei mir Dateien, die zum einen für ein Redirect zu https und zum anderen für die SSL Konfiguration sorgen.
root:~# vi /etc/apache2/sites-available/deb.tuxnet24.de.conf
# File: sites-available/deb.tuxnet24.de.conf
# Created: 2023-03-12 17:02:15
# Description: VirtualHost configuration for deb.tuxnet24.de
# Default VirtualHost: deb.tuxnet24.de
<VirtualHost *:80>
ServerAdmin postmaster@tuxnet24.de
ServerName deb.tuxnet24.de
Include custom.d/require_ssl.conf
</VirtualHost>
# SSL VirtualHost: deb.tuxnet24.de
<VirtualHost *:443>
ServerAdmin postmaster@tuxnet24.de
ServerName deb.tuxnet24.de
DocumentRoot /var/www/deb
<Directory />
Options +FollowSymLinks -Indexes
AllowOverride None
</Directory>
<Directory /var/www/deb>
Options +Indexes +MultiViews
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/deb/*/db/>
Require all denied
</Directory>
<Directory /var/www/deb/*/conf/>
Require all denied
</Directory>
<Directory /var/www/deb/*/incomming/>
Require all denied
</Directory>
# SSL configuration
Include custom.d/ssl_tuxnet24.de.conf
# Logfile configuration
CustomLog /var/log/apache2/deb.tuxnet24.de_acc.log common
ErrorLog /var/log/apache2/deb.tuxnet24.de_err.log
LogLevel warn
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Testen der Apache Konfiguration und Neustart des Services
Mit a2ensite <vhost.conf>
aktivieren wir unsere VirtualHost Datei. mit apache2ctl
prüfen wir die Konfiguration und reloaden den Webserver, wenn die Syntax OK ist.
root:~# a2ensite deb.tuxnet24.de.conf
root:~# apache2ctl configtest && apache2ctl graceful
Erstellen der distributions Datei
Die Datei beschreibt das Repository und für welche Distribution das Repo ist. Bei SignWith wird die Key ID verwendet von dem eben erzeugten GPG Key.
Bei Codename wird der OS Release Name angegeben, z.B. bei Debian buster oder bei Ubuntu bionic, das hängt von dem jeweiligen Release ab. Ist es ein generisches Repo dann kann hier auch z.B. all genommen werden.
root:~# vi /var/www/deb/debian/conf/distributions
Origin: Tuxnet24 Debian Repository
Label: Tuxnet24 Debian Repository
Suite: stable
Codename: bullseye
Architectures: i386 amd64
Components: main
Description: APT repository for my Debian packages
SignWith: 102BCF63B5C08736432D8CC9A0B45153D3FB5FE9
Origin: Tuxnet24 Debian Repository
Label: Tuxnet24 Debian Repository
Suite: stable
Codename: buster
Architectures: i386 amd64
Components: main
Description: APT repository for my Debian packages
SignWith: 102BCF63B5C08736432D8CC9A0B45153D3FB5FE9
In der /var/www/deb/debian/conf/options
Datei, übergeben wir für reprepro
Optionen wie verbose, basedir und ask-passphrase.
root:~# vi /var/www/deb/debian/conf/options
verbose
basedir /var/www/deb/debian
ask-passphrase
Diese Schritte wiederholen wir auch für das Ubuntu REPO.
root:~# vi /var/www/deb/ubuntu/conf/distributions
Origin: Tuxnet24 Debian Repository
Label: Tuxnet24 Debian Repository
Suite: stable
Codename: jammy
Architectures: i386 amd64
Components: main
Description: APT repository for my Debian packages
SignWith: 102BCF63B5C08736432D8CC9A0B45153D3FB5FE9
Origin: Tuxnet24 Debian Repository
Label: Tuxnet24 Debian Repository
Suite: stable
Codename: focal
Architectures: i386 amd64
Components: main
Description: APT repository for my Debian packages
SignWith: 102BCF63B5C08736432D8CC9A0B45153D3FB5FE9
root:~# vi /var/www/deb/ubuntu/conf/options
verbose
basedir /var/www/deb/ubuntu
ask-passphrase
Exportieren des GnuPG Keys
Der GPG Key muss in den APT Keyring auf dem Zielsystem aufgenommen werden damit man Pakete installieren kann. Dazu exportieren wir Ihn und stellen Ihn auf dem Webserver bereit.
root:~# gpg --armor --output /var/www/deb/gpg.key --export 102BCF63B5C08736432D8CC9A0B45153D3FB5FE9
Ein Paket veröffentlichen
Mit folgendem Befehl wird ein neues Paket z.B. serverstats.deb
dem Repository hinzugefügt. Wird das Kommando ausgeführt fragt der Assistent nach dem Passwort für den GPG Key. Zuvor setzen wir den REPREPRO_BASE_DIR
auf das jeweilige Repository (debian oder ubuntu). Diesen Schritt kann man übergehen, wenn man die Option reprepro -b /var/www/deb/debian
bzw. reprepro -b /var/www/deb/ubuntu
angibt.
root:~# export REPREPRO_BASE_DIR=/var/www/deb/debian
root:~# reprepro --ask-passphrase -V includedeb bullseye /root/serverstats.deb
root:~# reprepro --ask-passphrase -V includedeb buster /root/serverstats.deb
Das gleiche nun für das Ubuntu Repository.
root:~# export REPREPRO_BASE_DIR=/var/www/deb/ubuntu
root:~# reprepro --ask-passphrase -V includedeb jammy /root/serverstats.deb
root:~# reprepro --ask-passphrase -V includedeb focal /root/serverstats.deb
Im Browser kann man ebenfalls prüfen ob die Veröffentlichung geklappt hat, dazu https://deb.tuxnet24.de/ubuntu/pool/main/s/serverstats/ aufrufen:
Installieren von serverstats aus eigenem Repository
Als erstes muss der Public Key des Repositorys zur Keychain hinzugefügt werden.
tux@earth:~$ wget -O - https://deb.tuxnet24.de/gpg.key | sudo apt-key add -
Erstellen einer sources.list.d Datei
Die Datei /etc/apt/sources.list.d/tuxnet24.list
wird verwendet um das Repo einzubinden.
tux@earth:~$ sudo vi /etc/apt/sources.list.d/tuxnet24.list
deb https://deb.tuxnet24.de/ubuntu focal main
Aktualisieren von APT Quellen
tux@earth:~$ sudo apt-get update
....
Hit:11 https://deb.tuxnet24.de/ubuntu focal InRelease
Fetched 125 kB in 3s (39.9 kB/s)
Reading package lists... Done
Informationen zum Paket serverstats anzeigen lassen
tux@earth:~$ apt-cache show serverstats
Package: serverstats
Version: 0.0.1-0
Architecture: all
Depends: awk,perl,grep,iproute2,bash,hostname,sed
Installed-Size: 9.7
Maintainer: Marko Schulz <info@tuxnet24.de>
Homepage: https://deb.tuxnet24.de/
Priority: optional
Section: misc
Filename: pool/main/s/serverstats/serverstats_0.0.1-0_all.deb
Size: 4228
SHA256: 57dfb84ab4b9ca1d213ac354179603d334517f5c7979ffbb51c0a96906f0fb56
SHA1: f9e6e0462c974ff9a51f24ff3e507d1ec5bcc6f9
MD5sum: 4826a173bab7a9c9130603b20f25a2c4
Description: A shell script that runs as a SystemV
service and collects statistics from the current host
and stores them in a defined log file.
.
The default configuration can be overwritten in the file
/etc/default/serverstats.
Description-md5: 794e4e8e88d9c60eb308fd87f2d9b522
Paket serverstats installieren und wieder entfernen
Installieren...
tux@earth:~$ sudo apt-get install serverstats
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden NEUEN Pakete werden installiert:
serverstats
0 aktualisiert, 1 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen noch 0 B von 4.228 B an Archiven heruntergeladen werden.
Nach dieser Operation werden 9.216 B Plattenplatz zusätzlich benutzt.
Vormals nicht ausgewähltes Paket serverstats wird gewählt.
(Lese Datenbank ... 420787 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../serverstats_0.0.1-0_all.deb ...
Entpacken von serverstats (0.0.1-0) ...
serverstats (0.0.1-0) wird eingerichtet ...
Entfernen...
tux@earth:~$ sudo apt-get remove serverstats
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete werden ENTFERNT:
serverstats
0 aktualisiert, 0 neu installiert, 1 zu entfernen und 0 nicht aktualisiert.
Nach dieser Operation werden 9.216 B Plattenplatz freigegeben.
Möchten Sie fortfahren? [J/n]
(Lese Datenbank ... 420791 Dateien und Verzeichnisse sind derzeit installiert.)
Entfernen von serverstats (0.0.1-0) ...